package com.list;

public class Test3 {
    //给你一个链表的头节点 head 和一个整数 val ，请你删除链表中所有满足 Node.val == val 的节点，并返回 新的头节点 。
    public ListNode removeElements(ListNode head, int val) {
        ListNode node=new ListNode(0);
        node.next=head;
        ListNode temp=node;
        while (temp.next!=null){
            if (temp.next.val==val){
                temp.next=temp.next.next;
            }else {
                temp=temp.next;
            }
        }
        return node.next;
    }
    //递归解决
    public ListNode removeElements2(ListNode head, int val){
        if (head==null){
            return null;
        }
        head.next=removeElements2(head.next,val);
        return (head.val==val)?head.next:head;
    }
    public ListNode reverseList(ListNode head){
        if (head==null||head.next==null){
            return head;
        }
        ListNode cur=reverseList(head.next);
        head.next.next=head;
        head.next=null;
        return cur;
    }
    public ListNode reverseList2(ListNode head){
        ListNode pre=null;
        ListNode cur=head;
        ListNode tem=null;
        while (head.next!=null){
            tem=cur.next;
            cur.next=pre;
            pre=cur;
            cur=tem;
        }
        return pre;
    }

}
